西一木 发表于 2024-3-17 18:26:40

好人一生平安,求助各位大佬

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

函数的原型为:bool isPalindrome(string s);是回文返回true,不是返回flase。

文件源码:
StackLInk.java:
class Node {
    int data;
    Node next;

    public Node(int data) {
      this.data = data;
      this.next = null;
    }
}

public class StackLink {

    private Node top;

    public static void main(String[] args) {
      StackLink stack = new StackLink();
      stack.push(10);
      stack.push(20);
      stack.push(30);
      stack.display();
      System.out.println("寮瑰嚭鍏冪礌涓猴細" + stack.pop());
      System.out.println("鏍堥《鍏冪礌涓猴細" + stack.peek());
      stack.display();
    }

    /**
   * 鍒涘缓鏍
   */
    public StackLink() {
      top = null;
    }

    /**
   * 鍏冪礌鍏ユ爤
   * @param x
   */
    public void push(int x) {
      // 鍒涘缓鏂拌妭鐐
      Node newNode = new Node(x);
      // 鏂拌妭鐐圭殑next鎸囧悜鏍堥《鍏冪礌
      newNode.next = top;
      // 鏍堥《鎸囧悜鏂拌妭鐐
      top = newNode;
    }

    /**
   * 鍏冪礌鍑烘爤
   * @return
   */
    public int pop() {
      if (top == null) {
            System.out.println("Stack is empty");
            return -1;
      }
      // 鏍堥《鍏冪礌鍑烘爤
      int x = top.data;
      // 鏍堥《鎸囧悜涓嬩竴涓厓绱
      top = top.next;
      return x;
    }

    /**
   * 杩斿洖鏍堥《鍏冪礌
   * @return
   */
    public int peek() {
      if (top == null) {
            System.out.println("Stack is empty");
            return -1;
      }
      return top.data;
    }

    /**
   * 鍒ゆ柇鏍堟槸鍚︿负绌
   * @return
   */
    public boolean isEmpty() {
      return top == null;
    }

    /**
   * 鏄剧ず鏍堟墍鏈夊厓绱
   */
    public void display() {
      Node temp = top;
      while (temp != null) {
            System.out.print(temp.data + " ");
            temp = temp.next;
      }
      System.out.println();
    }
}




Stack.java:

import java.util.Arrays;

public class Stack{

    private int[] stack;
    private int size;

    public static void main(String[] args) {
      Stack stack = new Stack();
      stack.push(1);
      stack.push(2);
      stack.push(3);
      stack.printAllElement();
      System.out.println("鏍堥《鍏冪礌锛" + stack.peek() + " 澶у皬锛" + stack.size);
      System.out.println("鍑烘爤锛" + stack.pop());
      stack.printAllElement();
    }

    /**
   * 鍒涘缓鏍
   */
    public Stack() {
      stack = new int;
      size = 0;
    }

    /**
   * 鍒ゆ柇鏍堟槸鍚︿负绌
   * @return
   */
    public boolean isEmpty() {
      return size == 0;
    }

    /**
   * 娓呯┖鏍
   */
    public void clear() {
      stack = new int;
      size = 0;
    }

    /**
   * 杩斿洖鏍堥《鍏冪礌
   * @return 鏍堥《鍏冪礌
   */
    public int peek() {
      if (size > 0) {
            return stack;
      } else {
            return -1;
      }
    }

    /**
   * 鍏冪礌鍏ユ爤
   * @param e
   */
    public void push(int e) {
      judgeStackSize(size + 1);
      stack = e;
      size += 1;
    }

    /**
   * 鍏冪礌鍑烘爤
   * @return
   */
    public int pop() {
      int e = this.peek();
      stack = 0;
      size -= 1;
      return e;
    }

    /**
   * 鎵撳嵃鏍堜腑鎵鏈夊厓绱狅紝浠庢爤椤跺埌鏍堝簳
   */
    public void printAllElement() {
      for (int i = size - 1; i >= 0; i--) {
            System.out.println(stack);
      }
    }

    /**
   * 鍒ゆ柇鏍堢殑绌洪棿鏄惁瓒冲锛屼笉瓒冲垯鎵╁
   * @param size
   */
    private void judgeStackSize(int size) {
      int stackLength = stack.length;
      if (size > stackLength) {
            int expaned_size = size + 10;
            stack = Arrays.copyOf(stack, expaned_size);
      }
    }

}

FishC 发表于 2024-3-17 18:27:01

首先,根据题目要求,我们需要判断一个字符串是否为回文。那么我们可以通过比较字符串的正序和倒序是否相同来判断。

下面是一个简单的实现:

public boolean isPalindrome(String s) {
    // 将字符串转换为字符数组
    char[] chars = s.toCharArray();

    // 定义左右指针
    int left = 0;
    int right = chars.length - 1;

    // 循环比较字符
    while (left < right) {
      if (chars != chars) {
            return false;
      }
      left++;
      right--;
    }

    return true;
}

接下来,我们需要对提供的代码进行修改,使得它能够实现上述函数的功能。

首先,修改`StackLink.java`中的`main`方法,调用`isPalindrome`函数,并输出结果:

public static void main(String[] args) {
    String s = "abba";
    boolean result = isPalindrome(s);
    System.out.println(result);
}

然后,在`StackLink.java`中添加`isPalindrome`函数的实现:

public static boolean isPalindrome(String s) {
    // 将字符串转换为字符数组
    char[] chars = s.toCharArray();

    // 定义左右指针
    int left = 0;
    int right = chars.length - 1;

    // 循环比较字符
    while (left < right) {
      if (chars != chars) {
            return false;
      }
      left++;
      right--;
    }

    return true;
}

最后,编译并运行`StackLink.java`,即可得到判断结果。

注意,上述代码中使用了一个辅助函数`toCharArray`将字符串转换为字符数组,并使用了两个指针来比较字符。在比较过程中,如果发现不相等的字符,则说明该字符串不是回文。如果循环结束后仍然没有发现不相等的字符,则说明该字符串是回文。

希望对你有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 好人一生平安,求助各位大佬