鱼C论坛

 找回密码
 立即注册
查看: 1105|回复: 1

好人一生平安,各位大佬帮帮忙

[复制链接]
发表于 2024-3-20 00:14:31 | 显示全部楼层
对于第一个问题,判断给定的字符向量是否是回文的算法可以使用栈来实现。具体步骤如下:

1. 创建一个空栈。
2. 将字符串的前一半字符依次入栈。
3. 如果字符串长度是奇数,跳过中间的字符。
4. 遍历剩余的字符串的字符。
5. 每次遍历时,比较当前字符和栈顶元素是否相等。
6. 如果相等,将栈顶元素出栈继续比较下一个字符。
7. 如果不相等,字符串不是回文,返回false。
8. 如果所有字符都比较完毕,并且栈为空,说明字符串是回文,返回true。
9. 如果所有字符都比较完毕,但栈不为空,说明字符串不是回文,返回false。

下面是使用Java语言实现的代码:

  1. import java.util.Stack;

  2. public class Palindrome {

  3.     public static boolean isPalindrome(String s) {
  4.         int length = s.length();
  5.         Stack<Character> stack = new Stack<>();

  6.         // 将前一半字符入栈
  7.         for (int i = 0; i < length / 2; i++) {
  8.             stack.push(s.charAt(i));
  9.         }

  10.         // 判断字符串长度是奇数还是偶数
  11.         int offset = length % 2 == 0 ? 0 : 1;

  12.         // 遍历剩余的字符并与栈顶元素比较
  13.         for (int i = length / 2 + offset; i < length; i++) {
  14.             if (s.charAt(i) != stack.pop()) {
  15.                 return false;
  16.             }
  17.         }

  18.         // 如果栈不为空,说明字符串长度为奇数且最中间的字符与栈顶元素不相等
  19.         if (!stack.isEmpty()) {
  20.             return false;
  21.         }

  22.         return true;
  23.     }

  24.     public static void main(String[] args) {
  25.         String s1 = "abba";
  26.         String s2 = "abdba";
  27.         String s3 = "good";

  28.         System.out.println(isPalindrome(s1));  // true
  29.         System.out.println(isPalindrome(s2));  // true
  30.         System.out.println(isPalindrome(s3));  // false
  31.     }
  32. }
复制代码


对于第二个问题,将十进制数转换为m进制的数可以使用栈来实现。具体步骤如下:

1. 创建一个空栈。
2. 进行循环,直到十进制数变为0。
3. 每次循环时,将十进制数除以m的余数入栈。
4. 将十进制数除以m的商作为下一次循环的十进制数。
5. 当十进制数变为0时,结束循环。
6. 将栈中的元素依次出栈,得到的就是转换后的m进制数。

下面是使用Java语言实现的代码:

  1. import java.util.Stack;

  2. public class Convert {

  3.     public static void convert(int n, int m) {
  4.         Stack<Integer> stack = new Stack<>();

  5.         while (n > 0) {
  6.             stack.push(n % m);
  7.             n /= m;
  8.         }

  9.         while (!stack.isEmpty()) {
  10.             System.out.print(stack.pop());
  11.         }
  12.     }

  13.     public static void main(String[] args) {
  14.         convert(10, 2);  // 输出1010
  15.         System.out.println();
  16.         convert(15, 16);  // 输出F
  17.     }
  18. }
复制代码


希望对你有帮助,祝你学习进步!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-5 02:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表