算法——回文解密,判断一个素组是否为回文

算法中,队列是先进先出原则,而栈是后进先出原则,栈限定只能在一端进行插入和删除操作,而栈的作用有哪些?

可以通过一组回文字符串来看:“xyzyx”,同过栈来判断字符串是否是回文

案例:package test;

/**
 * @author dayu 解密回文——栈
 * @version 创建时间:2017年11月13日 下午2:15:01
 *          类说明
 */
public class zhan
{
    //回文——一定有对称轴,所以一定是单数
    public static void main(String[] args)
    {
        String str = "azhohza";//随机给定一组就可以
        int len=str.length();

        int mid = len / 2 ;//获取中点位置

        System.out.println("mid="+mid);

        //取两个数组chara,charb,长度为给定字符串的长度
        byte[] bytes = str.getBytes();
        char[] charb = new char[len];
        char[] chara = new char[len];

        //charb数组全部赋值
        for (int i = 0; i < len; i++)
        {
            charb[i] = (char)bytes[i];
        }

        //初始化栈,top=0,然后将中点之前的所有值依次入栈
        int top = 0;
        for (int i = 0; i < mid; i++)
        {
            chara[++top] = (char)charb[i];
            System.out.print("-"+charb[i]);
        }

        System.out.println("\ntop==="+top);
        //根据中心对称来判断,如果top=0,说明栈里面的所有字符一一匹配了
        for (int i = mid + 1; i < len ; i++)
        {
            if (charb[i] != chara[top])
            {
                break;
            }
            top--;
        }

        if (top == 0)
            System.out.println("是回文");
        else
            System.out.println("不是回文");

    }
}
时间: 2024-08-09 14:48:04

算法——回文解密,判断一个素组是否为回文的相关文章

数组 将一个数组的元素和另一个素组的元素相加,然后赋给第三个数组

    在20 - 40中去十个元素,赋给两个数组a,b,然后将它们的其中的十个元素相加,得到的结果赋给数组c.    int a[10] = {0},b[10] = {10},c[10]= {0};     for (int i = 0; i < 10; i++) {          a[i] = arc4random()%(40 - 20 +1) + 20;          b[i] = arc4random()%(40 - 20 +1) + 20;         c[i] = a[i

如何判断一个单向链表是否为回文链表(Palindrome Linked List)

题目:给定一个单向链表,判断它是不是回文链表(即从前往后读和从后往前读是一样的).原题见下图,还要求了O(n)的时间复杂度O(1)的空间复杂度. 我的思考: 1,一看到这个题目,大脑马上想到的解决方案就是数组.遍历链表,用数组把数据存下来,然后再进行一次遍历,同时用数组反向地与之比较,这样就可以判断是否回文.这个方法时间复杂度是O(n),达到了要求,然而空间复杂度显然不满足要求.所以,开数组这一类的方法显然不是最佳的. 2,既然要满足O(1)的空间复杂度,我就想到了用一个变量来存储这些数据,恰好

华为机试—回文数判断

判断一个整型数是否为"回文数",如1221,232,5. #include <iostream> using namespace std; void isHuiwen(int number) { int n = 0;//余数. int m = number; while(m != 0) { n = n*10 + m %10; //number的最低位变为n的最高位 m = m /10; } if(n==number) cout << "yes"

C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数

各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所以返回 2. 进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗? 题目地址 https://leetcode-cn.com/problems/add-digits/ 代码模板 public class Solution { public int AddDigits

判断一个字符串是不是一个合法的IP地址

最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代码: 1 public class Test_ip { 2 //程序入口 3 public static void main(String[] args) { 4 Solution s = new Solution(); // 业务逻辑放在Solution类里面 5 //String test_st

回文指的是一个字符串从前面读和从后面读都一 样,编写一个算法判断一个字符串是否为回文。

回文指的是一个字符串从前面读和从后面读都一 样,编写一个算法判断一个字符串是否为回文. 要求: 1)采用链栈实现算法: 2)从键盘输入一个字符串,输出判断结果. #include"stdio.h" #include"stdlib.h" typedef char ElemType; typedef struct stnode { ElemType data; struct stnode *next; }StNode, *LinkStack; int huiwen(ch

判断一个数字是否为回文数

Determine whether an integer is a palindrome. Do this without extra space.(source) 判断一个数字是否为回文数,并且不使用额外的存储空间. "回文"是指正读反读都能读通的句子,那么回文数,就很容易理解,就是指一个数正反读的值是相同的.还有一个要求是不要使用额外的存储空间. Hints: 要将一个数的最高位与最低位比较,取出一个数的最低位容易(x%10),但要得到高位却很难. Solution 1: 首先得知

判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)

回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 2 class CharNode 3 { 4 public char Char //字符 5 { 6 get; 7 set; 8 } 9 public CharNode Next //下一节点 10 { 11 get; 12 set; 13 } 14 public CharNode(char Cha

C判断一个正整数n的d进制数是否是回文数

所有的有关于回文数的定义和如何判断一个n的d进制数是否是回文数的方法都在我的代码注释当中,直接上代码: #include <stdio.h> int circle(int n,int d); /** * @brief main 判断正整数n的d进制表示是否是回文数 * @return */ int main(void) { /** * 回文数,就是顺着看和倒着看相同的书,例如n=232,十进制书表示为232, * 顺着看和倒着看都是232,则表示n是回文数 * 判断n的d进制表示是否是回文数有